ELLA is a Hardware description language and support toolset. Developed by the Royal Signals and Radar Establishment during the 1980s and 90s.
Includes tools to perform:
* design transformation
* symbolic simulations
* formal verification
ELLA is a winner of the 1989 Queen's Award for Technological Achievement.
== Sample ==
Sample originally from ftp://ftp.dra.hmg.gb/pub/ella - Public release.
Code for matrix multiplication hardware design verification:
MAC ZIP = ((n )TYPE t: vector1 vector2) -> ()()t:
(k = 1..n )(vector1(), vector2()).
MAC TRANSPOSE = ((n )(m )TYPE t: matrix) -> ()()t:
(i = 1..m ) (j = 1..n ) matrix()().
MAC INNER_PRODUCT
= ((n )()t: vector) -> s:
IF n = 1 THEN
*vector()
ELSE
*vector() + INNER_PRODUCT vector()
FI.
MAC MATRIX_MULT =
((n )(m )t: matrix1, ()(p )t: matrix2) -> ()()s:
BEGIN
LET transposed_matrix2 = TRANSPOSE matrix2.
OUTPUT (i = 1..n )(j = 1..p )
INNER_PRODUCTZIP(matrix1(),transposed_matrix2())
END.
TYPE element = NEW elt/(1..20),
product = NEW prd/(1..1200).
FN PLUS = (product: integer1 integer2) -> product:
ARITH integer1 + integer2.
FN MULT = (element: integer1 integer2) -> product:
ARITH integer1
* integer2.
FN MULT_234 = (()()element:matrix1, ()()element:matrix2) ->
()()product:
MATRIX_MULT(matrix1, matrix2).
FN TEST = () -> ()()product:
( LET m1 = ((elt/2, elt/1, elt/1),
(elt/3, elt/6, elt/9)),
m2 = ((elt/6, elt/1, elt/3, elt/4),
(elt/9, elt/2, elt/8, elt/3),
(elt/6, elt/4, elt/1, elt/2)).
OUTPUT
MULT_234 (m1, m2)
).
COM test: just displaysignal MOC